Langroid项目:使用OpenAI Assistants API实现多智能体编程
langroid Harness LLMs with Multi-Agent Programming 项目地址: https://gitcode.com/gh_mirrors/la/langroid
概述
OpenAI的Assistants API为构建LLM应用提供了多项便利功能,包括管理对话状态、持久化线程和助手、工具调用等。Langroid项目中的OpenAIAssistant
类将这些助手作为基本构建块,支持多智能体协作完成任务。
环境准备
安装依赖
首先需要安装Langroid库:
!pip install -q --upgrade langroid
导入必要模块
from pydantic import BaseModel
import json
import os
from langroid.agent.openai_assistant import (
OpenAIAssistantConfig,
OpenAIAssistant,
AssistantTool,
)
from langroid.agent.chat_agent import ChatAgent, ChatAgentConfig
from langroid.agent.task import Task
from langroid.agent.tool_message import ToolMessage
from langroid.language_models.openai_gpt import OpenAIGPTConfig, OpenAIChatModel
设置API密钥
import os
from getpass import getpass
os.environ['OPENAI_API_KEY'] = getpass('输入您的GPT4-Turbo API密钥:')
基础示例
示例1:基本聊天功能
cfg = OpenAIAssistantConfig(
llm=OpenAIGPTConfig(chat_model=OpenAIChatModel.GPT4_TURBO)
)
agent = OpenAIAssistant(cfg)
response = agent.llm_response("3的平方是多少?")
response = agent.llm_response("那5呢?") # 保持对话状态
示例2:将智能体封装为任务
task = Task(
agent,
system_message="用户会给你一个词,返回它的反义词,如果不知道就说DO-NOT-KNOW。要简洁!",
single_round=True
)
result = task.run("ignorant")
高级功能示例
示例3:代码解释器工具
agent.add_assistant_tools([AssistantTool(type="code_interpreter")])
task = Task(agent, interactive=False, single_round=True)
result = task.run("如果从1,2开始,第10个斐波那契数是多少?")
示例4:检索工具
import requests
file_url = "https://example.com/lease.txt"
response = requests.get(file_url)
with open('lease.txt', 'wb') as file:
file.write(response.content)
agent = OpenAIAssistant(cfg)
agent.add_assistant_tools([AssistantTool(type="retrieval")])
agent.add_assistant_files(["lease.txt"])
response = agent.llm_response("租赁合同的开始日期是什么时候?")
示例5:自定义函数调用
class SquareTool(ToolMessage):
request = "square"
purpose = "计算数字<num>的平方"
num: int
def handle(self) -> str:
return str(self.num ** 2)
cfg = OpenAIAssistantConfig(
llm=OpenAIGPTConfig(chat_model=OpenAIChatModel.GPT4_TURBO),
name="数字专家",
)
agent = OpenAIAssistant(cfg)
agent.enable_message(SquareTool)
task = Task(
agent,
system_message="用户会让你计算一个数的平方。你不知道怎么做,所以会使用square函数来找到答案。得到答案后说DONE并显示结果。",
interactive=False,
)
response = task.run("5的平方是多少?")
综合示例:双智能体租赁信息提取系统
定义数据结构
class LeasePeriod(BaseModel):
start_date: str
end_date: str
class LeaseFinancials(BaseModel):
monthly_rent: str
deposit: str
class Lease(BaseModel):
period: LeasePeriod
financials: LeaseFinancials
address: str
定义工具消息
class LeaseMessage(ToolMessage):
request: str = "lease_info"
purpose: str = "收集商业租赁信息"
terms: Lease
def handle(self):
print(f"完成! 成功提取租赁信息:{self.terms}")
return json.dumps(self.terms.dict())
创建检索智能体
retriever_cfg = OpenAIAssistantConfig(
name="租赁检索器",
llm=OpenAIGPTConfig(chat_model=OpenAIChatModel.GPT4_TURBO),
system_message="根据提供的文档回答问题",
)
retriever_agent = OpenAIAssistant(retriever_cfg)
retriever_agent.add_assistant_tools([AssistantTool(type="retrieval")])
retriever_agent.add_assistant_files(["lease.txt"])
retriever_task = Task(
retriever_agent,
llm_delegate=False,
single_round=True,
)
创建提取智能体
extractor_cfg = OpenAIAssistantConfig(
name="租赁提取器",
llm=OpenAIGPTConfig(chat_model=OpenAIChatModel.GPT4_TURBO),
system_message="你需要从一份你没有访问权限的租赁合同中收集信息。你需要通过提问来获取这些信息。一次只问一两个问题!",
)
extractor_agent = OpenAIAssistant(extractor_cfg)
extractor_agent.enable_message(LeaseMessage, include_defaults=False)
extractor_task = Task(
extractor_agent,
llm_delegate=True,
single_round=False,
)
运行双智能体系统
extractor_task.add_sub_task(retriever_task)
extractor_task.run()
总结
Langroid的OpenAIAssistant
类提供了:
- 一个简单易用的OpenAI Assistants API接口
- 无缝实现智能体间协作的能力
通过从基础示例到复杂双智能体系统的逐步演示,我们展示了如何利用Langroid构建强大的多智能体LLM应用。
langroid Harness LLMs with Multi-Agent Programming 项目地址: https://gitcode.com/gh_mirrors/la/langroid
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考