Langroid
是一个直观,轻巧,可扩展和原则性的Python框架,可轻松从CMU和UW-Madison研究人员中构建LLM驱动的应用程序。您设置代理,为它们配备可选的组件(LLM,矢量商店和工具/功能),分配任务,并通过交换消息来协作解决问题。这个多代理范式的灵感来自Actor Framework(但是您不需要了解此事!)。
Langroid
是对LLM应用程序开发的一种新鲜感,在此简化了开发人员的体验方面。它不使用Langchain
或任何其他LLM框架。
阅读Langroid体系结构的(WIP)概述
?公司正在生产/适应langroid。这是一个报价:
无效使用AI代理进行安全软件开发。它找到,确定并修复漏洞。在评估了Crewai,Autogen,Langchain,Langflow等之后,我们已经内部适应了Langroid在生产中的多代理编排框架。我们发现Langroid在易于设置和灵活性方面比这些框架要优于这些框架。 Langroid的代理和任务抽象是直观的,经过深思熟虑的,并提供了出色的开发人员体验。我们想要最快的方法来获得生产中的东西。有了其他框架,这将花费我们数周的时间,但是有了Langroid,我们在几分钟之内就取得了良好的成绩。强烈推荐!
- 杰基·王(Jacky Wong),无效的AI负责人。
请参阅LanganceB团队的Langroid博客文章的此简介
刚刚在医疗保健ML上出版(2024年):基于langroid的多代理抹布系统的药物宣传系统,请参阅博客文章
我们欢迎贡献:有关贡献的想法,请参见贡献文件。
您是在构建LLM应用程序,还是为公司的Langroid提供帮助,还是想为您的公司用例使用Langroid功能进行优先级级? Prasad Chalasani可用于咨询(咨询/开发):Gmail Dot com的Pchalasani。
赞助也通过GitHub赞助商接受
问题,反馈,想法?加入我们的不和谐!
这只是一个预告片;还有更多,例如函数打电话/工具,多代理协作,结构化信息提取,docChatagent(rag),sqlchatagent,non-openai local/remote llms等。向下滚动或查看文档以获取更多信息。请参阅使用OpenAI ChatCompletion API构建的langroid快速启动COLAB,该Colab最多可构建2个代理信息萃取示例。另请参阅此版本,该版本使用OpenAi Assistants API。
刚发布!示例脚本显示了如何仅使用本地LLM (Mistral-7B-Instruct-V0.2)从文档中提取结构化信息来提取结构化信息。
import langroid as lr
import langroid . language_models as lm
# set up LLM
llm_cfg = lm . OpenAIGPTConfig ( # or OpenAIAssistant to use Assistant API
# any model served via an OpenAI-compatible API
chat_model = lm . OpenAIChatModel . GPT4o , # or, e.g., "ollama/mistral"
)
# use LLM directly
mdl = lm . OpenAIGPT ( llm_cfg )
response = mdl . chat ( "What is the capital of Ontario?" , max_tokens = 10 )
# use LLM in an Agent
agent_cfg = lr . ChatAgentConfig ( llm = llm_cfg )
agent = lr . ChatAgent ( agent_cfg )
agent . llm_response ( "What is the capital of China?" )
response = agent . llm_response ( "And India?" ) # maintains conversation state
# wrap Agent in a Task to run interactive loop with user (or other agents)
task = lr . Task ( agent , name = "Bot" , system_message = "You are a helpful assistant" )
task . run ( "Hello" ) # kick off with user saying "Hello"
# 2-Agent chat loop: Teacher Agent asks questions to Student Agent
teacher_agent = lr . ChatAgent ( agent_cfg )
teacher_task = lr . Task (
teacher_agent , name = "Teacher" ,
system_message = """
Ask your student concise numbers questions, and give feedback.
Start with a question.
"""
)
student_agent = lr . ChatAgent ( agent_cfg )
student_task = lr . Task (
student_agent , name = "Student" ,
system_message = "Concisely answer the teacher's questions." ,
single_round = True ,
)
teacher_task . add_sub_task ( student_task )
teacher_task . run ()
2024年11月:
Agent
S的支持和OpenAI工具API的严格模式。Qwen2.5-Coder-32b-Instruct
)托管在glhf.chat上2024年10月:
2024年9月:
o1-mini
和o1-preview
模型。DocChatAgent
使用倒数融合(RRF)来通过不同方法检索的块。run_batch_task
新选项 - stop_on_first_result
允许在任何任务返回结果后立即终止批处理。2024年8月:
Task.run(), Task.run_async
。2024年7月:
2024年6月:
RewindTool
,它使代理可以“倒带和重做”过去的消息(并且由于谱系跟踪,清除了所有相关消息)。在这里阅读笔记。2024年5月:
doc-chat
, db
(用于与数据库相关的依赖关系)。请参阅下面和文档中更新的安装说明。examples
的classMethod,并且该列表中的随机示例将用于为LLM生成1次示例。这已经得到改进,因此您现在可以提供一个示例列表,每个示例是工具实例,或(描述,工具实例)的元组,其中描述是一种“思想”,导致LLM使用该工具(请参见文档中的示例)。在某些情况下,这可以提高LLM工具生成的准确性。另外,现在,所有示例都用于生成几个示例,而不是随机示例。TaskConfig
中可配置。仅检测精确的循环,而不是在实体所说的基本相似(但不是完全相同)的内容的情况下近似循环。RecipientTool
工具机制的简单替代方法,而权衡的折衷是,由于它不是工具,因此无法执行/提醒LLM明确指定收件人(在这很重要的情况下)。DocChatAgent
时,大量改进的引文生成和显示。gpt-4o
现在是整个默认LLM;更新测试和示例以与此LLM一起使用;使用与LLM相对应的Tokenizer。gemini 1.5 pro
支持通过litellm
QdrantDB:
更新以支持学习的稀疏嵌入。2024年4月:
chat_model="groq/llama3-8b-8192"
。参见教程。Task.run(), Task.run_async(), run_batch_tasks
具有max_cost
和max_tokens
params在代币或成本超过限制时退出。结果ChatDocument.metadata
现在包括一个status
字段,该字段是指示任务完成原因代码的代码。另外, task.run()
etc可以使用显式session_id
字段调用,该字段用作redis缓存中各种设置的键。当前仅用于查找“杀死状态” - 这允许通过task.kill()
或classMethod Task.kill_session(session_id)
杀死运行任务。例如用法,请参阅test_task_kill
in tests/main/test_task.py2024年3月:
DocChatAgent
并发运行,请参阅test_doc_chat_agent.py
,特别是test_doc_chat_batch()
;新任务运行实用程序: run_batch_task_gen
可以指定任务生成器,以每一个输入生成一个任务。DocChatAgent
现在将与Image-PDF一起使用)。DocChatAgent
上下文窗口修复URLLoader
:在URL不会以.pdf
, .docx
等识别后缀结尾时,从标题中检测文件时间。sentence_transformer
模块是否可用。unstructured
, haystack
, chromadb
, mkdocs
, huggingface-hub
, sentence-transformers
。import langroid as lr
更容易的顶级导入2024年2月:
chat_model="ollama/mistral"
。请参阅发行说明。2024年1月:
SQLChatAgent
工作方式)。请参阅使用此代理的示例脚本回答有关Python PKG依赖性的问题。.doc
文件解析(除了.docx
之外)OpenAIGPTConfig
中指定可选的formatter
param param,以确保本地LLM的准确聊天格式。DocChatAgentConfig
有一个新的参数: add_fields_to_content
,指定其他文档字段以插入主要content
字段,以帮助改善检索。2023年12月:
DocChatAgent
:摄取pandas的数据框架和过滤。LanceDocChatAgent
利用LanceDB
vector-DB进行有效的向量搜索和全文搜索和过滤。LanceRAGTaskCreator
创建由LanceFilterAgent
组成的2代理系统,该系统决定过滤器和重新显示查询以发送到抹布代理。Task
初始化,默认ChatAgent
。2023年11月:
0.1.126: OpenAiassistant代理:缓存支持。
0.1.117:支持OpenAI Assistant API工具:函数呼叫,代码窒息器和ReTRiever(RAG),文件上传。这些与Langroid的任务 - 策划无缝地工作。在文档准备好之前,最好看到这些用法示例:
测试:
示例脚本:
0.1.112: OpenAIAssistant
是ChatAgent
的一个子类,它利用了新的OpenAi Assistant API。它可以用作ChatAgent
的倒入替代品,并依靠助手API来维持对话状态,并利用持续的线程和助手在需要时重新连接。示例: test_openai_assistant.py
, test_openai_assistant_async.py
0.1.111:支持最新的OpenAI型号: GPT4_TURBO
(请参阅test_llm.py,例如用法)
0.1.110:从OpenAI v0.x升级到v1.1.1(为助手API做准备); (由于OpenAI版本冲突而导致litellm
暂时禁用)。
2023年10月:
DocChatAgent
重新排名: rank_with_diversity
, rank_to_periphery
(中间丢失)。DocChatAgentConfig.n_neighbor_chunks > 0
允许在比赛周围返回上下文块。DocChatAgent
使用RelevanceExtractorAgent
,以使用句子数字来使LLM提取物相关部分,从而与llmchainextractor in llmchain extractor in LangChain
在其LLMChainExtractor
使用中使用llmchain使用,从而导致较大的速度和降低成本降低和成本降低。import langroid as lr
。请参阅使用文档以获取使用。2023年9月:
docx
文件(初步)。SQLChatAgent
,在将自然语言转换为SQL时可以有效检索相关的架构信息。2023年8月:
GoogleSearchTool
启用代理商(其LLM)通过功能称呼/工具进行Google搜索。请参阅此聊天示例,以获取将此工具添加到代理商的容易性。SQLChatAgent
感谢我们最新的贡献者Rithwik Babu!2023年7月:
TableChatAgent
以与表格数据集(数据范围,文件,URL)聊天:LLM生成PANDAS代码,并且使用Langroid的工具/函数呼叫机制执行代码。DocChatAgent
现在接受PDF文件或URL。假设您想提取有关商业租赁文档的关键条款的结构化信息。如我们在langroid-examples repo中所示,您可以使用langroid轻松地使用langroid进行此操作。 (有关使用本地Mistral-7b模型具有相同功能的版本,请参见此脚本。
LeaseExtractor
负责该任务,其LLM(GPT4)生成了由DocAgent
回答的问题。DocAgent
LLM(GPT4)使用矢量商店的检索来回答LeaseExtractor
的问题,引用了支持答案的特定摘录。LeaseExtractor
llm使用函数呼叫以结构化格式呈现信息。这是动作中的外观(可停止的MP4视频在这里)。
(有关更多最新列表,请参见上面的“更新/发布”部分)
Task.run()
方法具有与代理人的响应者的方法相同的类型签名,这是代理如何将代理任务委派给其他子任务的关键:从任务的角度来看,子任务仅是其他响应者,仅在代理商自己的响应者之后以圆形robin时尚的方式使用。Agent
和Task
抽象使用户可以设计具有特定技能的代理,将其包裹在任务中,并以灵活的方式组合任务。ToolMessage
机制,而不仅仅是OpenAI。功能调用和工具具有使用Pydantic实现的相同面向开发人员的接口,这使得定义工具/功能变得非常容易,并使代理能够使用它们。使用pydantic的好处是,您永远不必为函数调用编写复杂的JSON规格,而LLM幻觉畸形的JSON时,Pydantic错误消息会发送回LLM,以便它可以修复它。langroid
Langroid需要Python 3.11+。我们建议使用虚拟环境。使用pip
安装langroid
(从PYPI)到您的虚拟环境的裸露版本。
pip install langroid
核心喇叭软件包使您可以通过其API使用OpenAI嵌入式型号。如果您想使用huggingface中嵌入模型的sentence-transformers
,请像这样安装langroid:
pip install " langroid[hf-embeddings] "
对于许多实际情况,您可能需要其他可选依赖性:
doc-chat
: pip install " langroid[doc-chat] "
db
Extra: pip install " langroid[db] "
` `
pip install " langroid[doc-chat,db] "
all
额外的额外(但请注意,这将导致更长的负载/启动时间和更大的安装尺寸): pip install " langroid[all] "
如果使用SQLChatAgent
(例如脚本examples/data-qa/sql-chat/sql_chat.py
),则使用postgres db,您将需要:
sudo apt-get install libpq-dev
,brew install postgresql
,等等。pip install langroid[postgres]
或poetry add langroid[postgres]
或poetry install -E postgres
。如果这给您一个错误,请尝试在Virtualenv中pip install psycopg2-binary
。如果您遇到涉及mysqlclient
奇怪错误,请尝试使用pip uninstall mysqlclient
然后进行pip install mysqlclient
。
首先,您需要的只是一个OpenAI API密钥。如果您没有一个,请参阅此OpenAI页面。 (请注意,尽管这是最简单的入门方式,但Langroid几乎可以与任何LLM一起使用,而不仅仅是来自OpenAI的LLM。请参阅指南使用Open/Local LLM,以及其他非Openai专有专有LLMS。)
在存储库的根部,将.env-template
文件复制到新文件.env
:
cp .env-template .env
然后插入您的OpenAI API键。您的.env
文件应该看起来像这样(组织是可选的,但在某些情况下可能需要)。
OPENAI_API_KEY=your-key-here-without-quotes
OPENAI_ORGANIZATION=optionally-your-organization-id
另外,您可以将其设置为外壳中的环境变量(每次打开新外壳时,都需要执行此操作):
export OPENAI_API_KEY=your-key-here-without-quotes
以下所有环境变量设置都是可选的,只需要使用特定功能(如下所述)。
.env
文件中输入您的Momento令牌,作为MOMENTO_AUTH_TOKEN
的值(请参阅下面的示例文件),.env
文件集合中CACHE_TYPE=momento
(而不是CACHE_TYPE=redis
,nefault)。GoogleSearchTool
。要将Google Search用作LLM工具/插件/功能通话,您需要设置Google API密钥,然后设置Google自定义搜索引擎(CSE)并获取CSE ID。 (这些文档可能具有挑战性,我们建议询问GPT4逐步指南。)在获得这些凭据之后,将它们存储为GOOGLE_API_KEY
的值和GOOGLE_CSE_ID
的值,并将其存储在.env
文件中。关于使用此聊天的完整文档(以及其他此类“无状态”工具)即将推出,但是与此同时,请浏览此聊天示例,该聊天示例显示了如何轻松地为代理配备GoogleSearchtool
。如果添加所有这些可选变量,则.env
文件应该看起来像这样:
OPENAI_API_KEY=your-key-here-without-quotes
GITHUB_ACCESS_TOKEN=your-personal-access-token-no-quotes
CACHE_TYPE=redis # or momento
REDIS_PASSWORD=your-redis-password-no-quotes
REDIS_HOST=your-redis-hostname-no-quotes
REDIS_PORT=your-redis-port-no-quotes
MOMENTO_AUTH_TOKEN=your-momento-token-no-quotes # instead of REDIS* variables
QDRANT_API_KEY=your-key
QDRANT_API_URL=https://your.url.here:6333 # note port number must be included
GOOGLE_API_KEY=your-key
GOOGLE_CSE_ID=your-cse-id
使用Azure OpenAI时, .env
文件中需要其他环境变量。此页面Microsoft Azure OpenAi提供了更多信息,您可以按以下方式设置每个环境变量:
AZURE_OPENAI_API_KEY
,来自API_KEY
的值AZURE_OPENAI_API_BASE
从ENDPOINT
的值中,通常看起来像https://your.domain.azure.com
。AZURE_OPENAI_API_VERSION
,您可以在.env-template
中使用默认值,并且可以在此处找到最新版本AZURE_OPENAI_DEPLOYMENT_NAME
是已部署模型的名称,该模型在模型设置过程中由用户定义AZURE_OPENAI_MODEL_NAME
azure openai允许特定的型号名称。您需要精确列出所选择的确切型号名称。例如,GPT-4(应为gpt-4-32k
或gpt-4
)。AZURE_OPENAI_MODEL_VERSION
,如果AZURE_OPENAI_MODEL_NAME = gpt=4
,则需要我们通过此Docker映像提供了langroid-examples
存储库的容器化版本。您需要做的就是在.env
文件中设置环境变量。请按照以下步骤设置容器:
# get the .env file template from `langroid` repo
wget -O .env https://raw.githubusercontent.com/langroid/langroid/main/.env-template
# Edit the .env file with your favorite editor (here nano), and remove any un-used settings. E.g. there are "dummy" values like "your-redis-port" etc -- if you are not using them, you MUST remove them.
nano .env
# launch the container
docker run -it --rm -v ./.env:/langroid/.env langroid/langroid
# Use this command to run any of the scripts in the `examples` directory
python examples/ < Path/To/Example.py >
这些是快速的预告片,可以瞥见您可以使用langroid以及您的代码外观。
langroid-examples
存储库。
LANGROID中的各种LLM提示和说明已经过测试,可与GPT-4(以及在某种程度上GPT-4O)配合使用。切换到其他LLM(本地/开放和专有)很容易(请参见上面提到的指南),并且对于某些应用程序可能就足够了,但是通常,除非调整提示和/或多代理设置,否则您可能会看到劣等的结果。
另请参阅Getting Started Guide
以获取详细的教程。
单击以扩展下面的任何代码示例。所有这些都可以在COLAB笔记本中运行:
import langroid . language_models as lm
mdl = lm . OpenAIGPT ()
messages = [
lm . LLMMessage ( content = "You are a helpful assistant" , role = lm . Role . SYSTEM ),
lm . LLMMessage ( content = "What is the capital of Ontario?" , role = lm . Role . USER ),
]
response = mdl . chat ( messages , max_tokens = 200 )
print ( response . message )
cfg = lm . OpenAIGPTConfig (
chat_model = "local/localhost:8000" ,
chat_context_length = 4096
)
mdl = lm . OpenAIGPT ( cfg )
# now interact with it as above, or create an Agent + Task as shown below.
如果该模型由liteLLM
支持,则无需启动代理服务器。只需将chat_model
param上的param设置为litellm/[provider]/[model]
,例如litellm/anthropic/claude-instant-1
,然后使用上述配置对象。请注意,要使用litellm
,您需要安装langroid fut the litellm
Extra: poetry install -E litellm
或pip install langroid[litellm]
。对于远程模型,通常需要将API键等设置为环境变量。您可以根据litellm文档设置这些设置。如果缺少任何必需的环境变量,Langroid会提供有用的错误消息,指示需要哪些消息。请注意,要将langroid
与litellm
一起使用,您需要在虚拟env中安装litellm
pip install langroid[litellm]
,或者如果您在langroid
repo内开发poetry install -E litellm
。
pip install langroid[litellm]
import langroid as lr
agent = lr . ChatAgent ()
# get response from agent's LLM, and put this in an interactive loop...
# answer = agent.llm_response("What is the capital of Ontario?")
# ... OR instead, set up a task (which has a built-in loop) and run it
task = lr . Task ( agent , name = "Bot" )
task . run () # ... a loop seeking response from LLM or User at each turn
玩具号码游戏,当给出一个数字n
时:
repeater_task
的LLM简单地返回n
,n
是偶数,则even_task
llm返回n/2
odd_task
的llm返回3*n+1
如果n
是奇数,否则说“不知道”这些Task
中的每一个都会自动配置默认的ChatAgent
。
import langroid as lr
from langroid . utils . constants import NO_ANSWER
repeater_task = lr . Task (
name = "Repeater" ,
system_message = """
Your job is to repeat whatever number you receive.
""" ,
llm_delegate = True , # LLM takes charge of task
single_round = False ,
)
even_task = lr . Task (
name = "EvenHandler" ,
system_message = f"""
You will be given a number.
If it is even, divide by 2 and say the result, nothing else.
If it is odd, say { NO_ANSWER }
""" ,
single_round = True , # task done after 1 step() with valid response
)
odd_task = lr . Task (
name = "OddHandler" ,
system_message = f"""
You will be given a number n.
If it is odd, return (n*3+1), say nothing else.
If it is even, say { NO_ANSWER }
""" ,
single_round = True , # task done after 1 step() with valid response
)
然后将even_task
和odd_task
添加为repeater_task
的子任务,然后运行repeater_task
,以输入为数字:
repeater_task . add_sub_task ([ even_task , odd_task ])
repeater_task . run ( "3" )
Langroid利用Pydantic支持OpenAI的功能称呼API以及其自己的本机工具。好处是您不必写任何JSON来指定模式,而且LLM幻觉是畸形的工具语法,Langroid会将Pydantic验证错误(适当消毒)发送到LLM,以便它可以解决!
简单示例:说代理有一个秘密列表,我们希望LLM在列表中找到最小的数字。我们希望为LLM提供一个probe
工具/功能,该工具将单个数字n
作为参数。代理中的工具处理程序方法返回其列表中的数字最多为n
。
首先使用langroid的ToolMessage
类别定义工具:
import langroid as lr
class ProbeTool ( lr . agent . ToolMessage ):
request : str = "probe" # specifies which agent method handles this tool
purpose : str = """
To find how many numbers in my list are less than or equal to
the <number> you specify.
""" # description used to instruct the LLM on when/how to use the tool
number : int # required argument to the tool
然后将SpyGameAgent
定义为ChatAgent
的子类,并使用处理此工具的方法probe
:
class SpyGameAgent ( lr . ChatAgent ):
def __init__ ( self , config : lr . ChatAgentConfig ):
super (). __init__ ( config )
self . numbers = [ 3 , 4 , 8 , 11 , 15 , 25 , 40 , 80 , 90 ]
def probe ( self , msg : ProbeTool ) -> str :
# return how many numbers in self.numbers are less or equal to msg.number
return str ( len ([ n for n in self . numbers if n <= msg . number ]))
然后,我们实例化代理,并使其能够使用并响应该工具:
spy_game_agent = SpyGameAgent (
lr . ChatAgentConfig (
name = "Spy" ,
vecdb = None ,
use_tools = False , # don't use Langroid native tool
use_functions_api = True , # use OpenAI function-call API
)
)
spy_game_agent . enable_message ( ProbeTool )
有关完整的工作示例,请参见langroid-examples
repo中的Chat-Agent-tool.py脚本。
假设您希望代理从租赁文档和嵌套的JSON结构中提取租赁的关键条款。首先通过Pydantic模型来定义所需的结构:
from pydantic import BaseModel
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
然后将LeaseMessage
工具定义为Langroid ToolMessage
的子类。注意该工具具有类型Lease
的必需参数terms
:
import langroid as lr
class LeaseMessage ( lr . agent . ToolMessage ):
request : str = "lease_info"
purpose : str = """
Collect information about a Commercial Lease.
"""
terms : Lease
然后使用处理此工具的方法lease_info
定义LeaseExtractorAgent
,实例化代理,并使其能够使用并响应此工具:
class LeaseExtractorAgent ( lr . ChatAgent ):
def lease_info ( self , message : LeaseMessage ) -> str :
print (
f"""
DONE! Successfully extracted Lease Info:
{ message . terms }
"""
)
return json . dumps ( message . terms . dict ())
lease_extractor_agent = LeaseExtractorAgent ()
lease_extractor_agent . enable_message ( LeaseMessage )
有关完整的工作示例,请参见langroid-examples
repo中的chat_multi_extract.py
脚本。
为此目的,langroid为此提供了专门的代理类DocChatAgent
。它结合了文档碎片,嵌入,存储在矢量db中,并结合了检索调查的查询 - 回答生成。使用此类与文档集合聊天很容易。首先创建一个DocChatAgentConfig
实例,并使用doc_paths
字段指定要聊天的文档。
import langroid as lr
from langroid . agent . special import DocChatAgentConfig , DocChatAgent
config = DocChatAgentConfig (
doc_paths = [
"https://en.wikipedia.org/wiki/Language_model" ,
"https://en.wikipedia.org/wiki/N-gram_language_model" ,
"/path/to/my/notes-on-language-models.txt" ,
],
vecdb = lr . vector_store . QdrantDBConfig (),
)
然后实例化DocChatAgent
(这将文档摄取到矢量商店中):
agent = DocChatAgent ( config )
然后,我们可以问代理人一次性问题,
agent . llm_response ( "What is a language model?" )
或将其包装在Task
中,并与用户运行交互式循环:
task = lr . Task ( agent )
task . run ()
请参阅langroid-examples
Repo的docqa
文件夹中的完整工作脚本。
使用langroid,您可以使用数据集(文件路径,URL或DataFrame)设置TableChatAgent
,并查询它。代理的LLM生成熊猫代码以通过函数调用(或工具/插件)回答查询,而代理的功能处理方法执行代码并返回答案。
这是您可以做到的:
import langroid as lr
from langroid . agent . special import TableChatAgent , TableChatAgentConfig
为数据文件,URL或DataFrame设置一个TableChatAgent
(确保数据表具有标头行;自动删除的分界符/分隔器):
dataset = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
# or dataset = "/path/to/my/data.csv"
# or dataset = pd.read_csv("/path/to/my/data.csv")
agent = TableChatAgent (
config = TableChatAgentConfig (
data = dataset ,
)
)
设置一个任务,并提出这样的问题:
task = lr . Task (
agent ,
name = "DataAssistant" ,
default_human_response = "" , # to avoid waiting for user input
)
result = task . run (
"What is the average alcohol content of wines with a quality rating above 7?" ,
turns = 2 # return after user question, LLM fun-call/tool response, Agent code-exec result
)
print ( result . content )
或者,设置任务并与用户进行交互式循环运行:
task = lr . Task ( agent , name = "DataAssistant" )
task . run ()
有关完整的工作示例,请参见langroid-examples
repo中的table_chat.py
脚本。
如果您喜欢这个项目,请给它一个明星吗?在您的网络或社交媒体中传播这个词:
您的支持将有助于建立Langroid的势头和社区。