s01 搭建第一个对话智能体

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}
相关推荐
Cosolar2 小时前
LlamaIndex索引类型全解析:原理与实战指南
运维·服务器
方便面不加香菜4 小时前
Linux--基础IO(一)
linux·运维·服务器
2401_868534786 小时前
NFV:将安全设备部署到虚拟机上
网络
love530love6 小时前
LiveTalking 数字人项目 Windows 部署完全指南(EPGF 架构)
人工智能·windows·python·架构·livetalking·epgf
小鹰-上海鹰谷-电子实验记录本6 小时前
第六届党建引领科创生态座谈会 | 邓光辉博士出席分享AI赋能创新药科研新范式
人工智能·ai·电子实验记录本·药企合规
遇事不決洛必達6 小时前
【Python基础】GIL 锁是什么及其对爬虫的影响
爬虫·python·线程·进程·gil锁
极客老王说Agent6 小时前
2026电信IDC机房巡检深度报告:人工巡检频次和深度够吗?实在Agent重塑智慧运维新范式
人工智能·ai·chatgpt
zhengfei6116 小时前
【渗透工具】Payloader — 渗透测试辅助平台(payload一键所有)
网络·安全·web安全
Bruce_Liuxiaowei6 小时前
Prompt注入_我的AI编码助手被策反了
人工智能·ai·prompt·提示词·智能体
鼎讯信通6 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库