手写一个简单的 Claude Code

本文将带你手把手写一个简单的 Claude Code,以了解 harness 的基本原理。 openai 库 Chat Completions API 是由 OpenAI 提出的一套对话接口规范,很多模型厂商都选择兼容它(比如本文要用的 DeepSeek,接口格式和 OpenAI 几乎一模一样)。 在 Python 中,OpenAI 提供了一个叫 openai 的库,可以用来调用所有兼容该接口的模型,而不只是 OpenAI 自家的模型。 pip install openai 对话 单轮对话 以下是 DeepSeek 官方接口文档的单轮对话示例: import os from openai import OpenAI client = OpenAI( api_key=os.environ.get('DEEPSEEK_API_KEY'), base_url="https://api.deepseek.com") response = client.chat.completions.create( model="deepseek-v4-pro", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False, # 非流式输出,一次性输出完整的响应 reasoning_effort="high", extra_body={"thinking": {"type": "enabled"}} # `thinking` 是 DeepSeek 官方额外提供的字段,原 API 并没有这一个设置 ) print(response.choices[0].message.reasoning_content) # 思考内容 print(response.choices[0].message.content) # 正文 多轮对话 上面一个单轮对话的例子,也就是说,LLM 本身并不存储上下文,需要你来记录上下文,在每一轮对话前提供给 LLM: # 第一轮对话 messages.append({'role': 'user', 'content': '你好呀,我叫 Alice'}) response = client.chat.completions.create( ... messages=messages ) messages.append(response.choices[0].message) # assistant: 你好呀,Alice!很高兴认识你 😊 # 第二轮对话 messages.append({'role': 'user', 'content': '我叫什么名字?'}) response = client.chat.completions.create( ... messages=messages ) messages.append(response.choices[0].message) # assistant: 你叫 Alice 呀~😄 刚才你告诉我的,我记得呢! 每次都把聊天记录附给 LLM,这样 LLM 就有了上下文。 ...

2026/08/15 · 10 min · 2073 words · zzy2357