s01:搭建第一个对话智能体
什么是对话智能体
大模型是大脑,是外部提供的,所以我们要做的就是接收用户的输入,把用户的输入转发给云端大模型,然后再接收云端大模型的响应返回给用户,这样就实现了一个简单的对话智能体,这里我们使用Python和Acthropic ADK 来搭建这个程序
下面给出最简代码
python
import os
from anthropic import Anthropic
from dotenv import load_dotenv
load_dotenv(override=True)
client = Anthropic(base_url=os.getenv("ANTHROPIC_BASE_URL"))
MODEL = os.environ.get("MODEL_ID", "deep-seek-chat")
//以上是一些环境加载,结合AI帮助大家看懂以及配置
//存储和模型的会话历史
messages = []
while True:
user_input = input("你 >> ")
if user_input.strip().lower() in ("q", ""):
break
messages.append({"role": "user", "content": user_input})
//这个接口相当于把messages发送到云端大模型然后接收到对应的响应
response = client.messages.create(
model=MODEL,
system="你是一个友好的助手。简洁回答。",
messages=messages,
max_tokens=1024,
)
//单次对话,取响应的第一个元素即可
reply = response.content[0].text
//补充会话历史
messages.append({"role": "assistant", "content": reply})
//打印返回消息
print(f"AI >> {reply}\n")
//->进入下一轮对话等待用户的消息
流程大概是
while -> 接收用户输入(补充上下文) → 发送给大模型 → 返回响应(补充上下文) → 进入下一次循环
讲解一些基本的数据结构
message
列表里面套元组,基本格式:
python
{"role":[user/system/assistant],"content":str}
# content的内容通常为字符串
# role 的内容对应只有三个
content block
content 可以是 字符串,也可以是 列表:
纯文本
python
{"role": "user", "content": "你好"}
带工具结果
python
{"role": "user", "content": [
{"type": "tool_result", "tool_use_id": "toolu_xxx", "content": "晴,25°C"}
]}
模型回复的 response.content 也是列表:
只有文本
python
[TextBlock(type="text", text="今天天气不错")]
文本+工具调用
python
[
TextBlock(type="text", text="让我查一下"),
ToolUseBlock(type="tool_use", id="toolu_xxx", name="get_weather", input={"city": "北京"})
]
tool definition
python
{
"name": "get_weather", # 工具名称
"description": "查询天气", # 工具描述
"input_schema": { # JSON Schema 输入格式
"type": "object", # 表明是一个object类型(也就是传入键值对输入)
"properties": { # 声明调用工具的时候需要提供的字段
"city": {"type": "string"} # "city"字段 类型string
},
"required": ["city"] # 表名那个字段是必须提供的
}
}
Response对象
python
response = client.messages.create(...)
python
response.content # List[ContentBlock] --- 回复内容
response.stop_reason # "end_turn" | "tool_use" | "max_tokens"
response.usage # Token 用量 {input_tokens, output_tokens}