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}
相关推荐
ALINX技术博客24 分钟前
ALINX 亮相 2026 WAIC 世界人工智能大会,展示 AI 视觉 FPGA+GPU 异构计算与电子后视镜解决方案
人工智能·ai·fpga·世界人工智能大会·电子后视镜
想会飞的蒲公英1 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
JaydenAI1 小时前
[AG-UI详解-01]创建一个类似ChatGPT应用与Agent实时交互
ai·agent·ag-ui·maf
SeaTunnel2 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记2 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
一叶龙洲2 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
CCPC不拿奖不改名2 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code3 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook3 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化
星恒讯工业路由器4 小时前
5G FWA技术演进与趋势
网络·5g·信息与通信·4g·5g fwa·3gpp规范·fwa趋势