Langroid项目技术解析:从基础对话到多智能体协作
langroid Harness LLMs with Multi-Agent Programming 项目地址: https://gitcode.com/gh_mirrors/la/langroid
引言
Langroid是一个功能强大的语言模型交互框架,它简化了开发者与大型语言模型(LLM)的交互过程。本文将带您深入了解Langroid的核心功能,从基础对话到复杂的多智能体协作场景。
基础对话功能
直接与LLM对话
Langroid最基础的功能是直接与语言模型进行对话。开发者可以轻松配置不同的模型:
import langroid as lr
import langroid.language_models as lm
llm_config = lm.OpenAIGPTConfig(
chat_model="glhf/hf:Qwen/Qwen2.5-Coder-32B-Instruct"
)
llm = lm.OpenAIGPT(llm_config)
这种基础对话模式的特点是:
- 每次对话都是独立的
- 不会保留上下文历史
- 适合简单的问答场景
例如:
llm.chat("1 2 4 7 11 ?")
# 输出16及解释
使用智能体保留对话历史
为了保持对话上下文,Langroid提供了ChatAgent:
agent = lr.ChatAgent(lr.ChatAgentConfig(llm=llm_config))
agent.llm_response("Find the next number: 1 2 4 7 11 ?")
# 输出16
agent.llm_response("and then?")
# 输出22
智能体的优势在于:
- 自动维护对话历史
- 支持多轮交互
- 为更复杂的交互奠定基础
任务系统
Langroid的Task系统提供了更结构化的交互方式:
task = lr.Task(agent, interactive=True)
task.run()
Task的特点:
- 封装了交互逻辑
- 支持用户输入
- 可以设置交互模式(交互式/非交互式)
工具与结构化输出
Langroid支持通过Pydantic定义结构化工具,这是其强大功能之一:
from langroid.pydantic_v1 import BaseModel
class CityTemperature(BaseModel):
city: str
temp: float
class WeatherTool(lr.ToolMessage):
request: str = "weather_tool"
purpose: str = "提取文本中的<city_temp>信息"
city_temp: CityTemperature
def handle(self) -> ResultTool:
return ResultTool(city_temp=self.city_temp)
工具系统的特点:
- 自动生成JSON schema
- 无需手动处理复杂结构
- 支持XML格式(更可靠的代码结构化输出)
启用工具后,可以创建专门的任务:
agent.enable_message(WeatherTool)
task = lr.Task(agent, interactive=False)[CityTemperature]
data = task.run("波士顿气温45华氏度")
文档问答(RAG)
Langroid内置了强大的文档问答功能:
doc_agent_config = lr.agent.special.DocChatAgentConfig(llm=llm_config)
doc_agent = lr.agent.special.DocChatAgent(doc_agent_config)
doc_agent.ingest_doc_paths("https://en.wikipedia.org/wiki/Ludwig_van_Beethoven")
result = doc_agent.llm_response("贝多芬何时从波恩搬到维也纳?")
文档问答功能特点:
- 自动处理网页/文档内容
- 支持分块和向量索引
- 提供引用来源
- 适合知识密集型问答
多智能体协作
Langroid最强大的功能之一是支持多智能体协作:
教师智能体设置
teacher = lr.ChatAgent(
lr.ChatAgentConfig(
llm=llm_config,
system_message="""
提出数字相关问题,学生将回答。
你可以提供反馈或提示帮助学生找到正确答案。
收到正确答案后,使用DoneTool结束会话。
"""
)
)
teacher.enable_message(DoneTool)
teacher_task = lr.Task(teacher, interactive=False)
学生智能体设置
student = lr.ChatAgent(
lr.ChatAgentConfig(
llm=llm_config,
system_message="""
你将收到数字相关问题。尽力回答。
如果回答错误,会收到反馈或提示,
可以修改答案,直到正确为止。
"""
)
)
student_task = lr.Task(student, interactive=False, single_round=True)
建立任务层级关系
teacher_task.add_sub_task(student_task)
teacher_task.run()
多智能体协作特点:
- 支持角色定义
- 灵活的任务层级
- 自然的交互流程
- 适合教学、评审等场景
总结
Langroid提供了从基础到高级的LLM交互功能:
- 基础对话:支持多种模型配置
- 智能体:维护对话上下文
- 任务系统:结构化交互流程
- 工具系统:结构化输出处理
- 文档问答:强大的RAG能力
- 多智能体:复杂协作场景
这些功能使Langroid成为构建复杂语言模型应用的理想框架,无论是简单的问答系统还是复杂的多智能体协作场景,都能提供优雅的解决方案。
langroid Harness LLMs with Multi-Agent Programming 项目地址: https://gitcode.com/gh_mirrors/la/langroid
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考