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}
相关推荐
xixixi777771 小时前
AI的“账号”与“钱包”:AWS与Circle同日出手,AI正从工具进化
人工智能·安全·ai·大模型·云计算·aws
用户8356290780511 小时前
使用 Python 在 PowerPoint 中生成并自定义饼图与环形图
后端·python
棉猴1 小时前
python海龟绘图之倾转
python·turtle·海龟绘图·titlangle·tilt
_oP_i1 小时前
https://github.com/langgenius/dify查看设置的apikey
ai
小白学大数据2 小时前
基于大模型的Python智能爬虫:语义识别与数据清洗实践
开发语言·爬虫·python·数据分析
Cloud_Shy6182 小时前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(附录 B 高级 VS Code 功能)
vscode·python·jupyter·数据分析·excel
进击切图仔2 小时前
从零手写 RAG
python·huggingface·rag
小王C语言2 小时前
Windows和Linux之间文件互传
linux·运维·服务器
Dxy12393102162 小时前
Python请求方式介绍:JSON、表单及其他常见数据传输格式
数据库·python·json