alipay / agentUniverse

agentUniverse is a LLM multi-agent framework that allows developers to easily build multi-agent applications.
Apache License 2.0
906 stars 113 forks source link

fix law_chat_bot #194

Open Flamx123 opened 4 days ago

Flamx123 commented 4 days ago

问题定位与解决

Bug1

在添加 qwen 的 API KEY 后 sample_standard_app/app/examples/law_chat_bot.py 无法跑通,报错如下:

image

在配置文件 sample_standard_app/app/core/agent/rag_agent_case/law_rag_agent.yaml 中显示,law_chat_bot.py 使用的 agent 为 law_rag_agent,其调用的模型为 qwen_llm

info:
  name: 'law_rag_agent'
  description: '一个法律顾问,可以根据给出的事件,以及提供的背景知识做出客观的司法判断。'
profile:
  introduction: 你是一位精通信息分析的ai法律顾问。
  target: 你的目标是根据给出的事件,以及提供的背景知识做出客观的司法判断。
  instruction: |
    你需要遵守的规则是:
    1. 必须使用中文结合背景信息做出判决,没有在背景知识中的条例不允许引用。
    2. 结构化答案生成,必要时通过空行提升阅读体验。
    3. 多考虑背景知识和场景的关联性。
    4. 多使用“根据民法典第XX条”“根据刑法第XX条”这种句式开头,但要求事件内容确实和对应条目相关,否则不要提及。
    5. 如果背景信息和内容无关则不要引用,引用条例时不要再强调“根据背景信息”这一点。

    背景信息是:
    {background}

    事件是: {input}
  llm_model:
    name: 'qwen_llm'
    model_name: 'qwen-max'
plan:
  planner:
    name: 'rag_planner'
action:
  knowledge:
    - 'law_knowledge'
metadata:
  type: 'AGENT'
  module: 'sample_standard_app.app.core.agent.rag_agent_case.law_rag_agent'
  class: 'LawRagAgent'

对比 demo_rag_agent 的配置文件sample_standard_app/app/core/agent/rag_agent_case/demo_rag_agent.yaml,law_rag_agent 中增加了 law_knowledge(sample_standard_app/app/core/agent/rag_agent_case/law_rag_agent.yaml):

name: "law_knowledge"
description: "中国民法与刑法相关的知识库"
stores:
    - "civil_law_chroma_store"
    - "criminal_law_chroma_store"
    - "civil_law_sqlite_store"
    - "criminal_law_sqlite_store"
query_paraphrasers:
    - "custom_query_keyword_extractor"
insert_processors:
    - "recursive_character_text_splitter"
rag_router: "nlu_rag_router"
post_processors:
    - "dashscope_reranker"
readers:
    pdf: "default_pdf_reader"

metadata:
  type: 'KNOWLEDGE'
  module: 'sample_standard_app.app.core.knowledge.law_knowledge'
  class: 'LawKnowledge'

其中的 nlu_rag_router (sample_standard_app/app/core/rag_router/nlu_rag_router.yaml)也调用了 llm,且默认为 gpt:

name: 'nlu_rag_router'
description: 'base rag router map query to all store'
store_amount: 2
llm:
  name: demo_llm
  model_name: gpt-4o
metadata:
  type: 'RAG_ROUTER'
  module: 'agentuniverse.agent.action.knowledge.rag_router.nlu_rag_router'
  class: 'NluRagRouter'

将 demo_llm 修改为 qwen_llm 后,该 Bug 解决。

Bug2

Bug1 解决后再次运行 law_chat_bot.py 虽有输出,但仍有报错,且输出的 retrieved background 为空:

image

image

定位报错信息的 agentuniverse/agent/action/knowledge/knowledge.py 的 190 附近,原因是 futures 的返回结果为空,此处应该是在知识库 civil_law_chroma_store 和 civil_law_sqlite_store 中进行检索

image

image

单独运行 StoreManager().get_instance_obj().query(),出现报错:

image

image

image

Bug2.1

报错是因为 agentuniverse/agent/action/knowledge/store/chroma_store.py 中 self.collection 为 None,根本原因是 self.collection 在 _new_client 中被赋值,但 _new_client 未被调用:

image

image 在 self.collection 为 None 时增加 _new_client 的调用后该 Bug 消失:

image

Bug2.2

Bug2.1 解决后再次运行 law_chat_bot.py 仍有报错:

image

image

报错是因为 agentuniverse/agent/action/knowledge/store/sqlite_store.py 中 self.conn 为 None,根本原因同样是 self.conn 在 _new_client 中被赋值,但 _new_client 未被调用:

image

image

同样在 self.conn 为 None 时增加 _new_client 的调用:

image

解决完 Bug2.1 和 Bug2.2 后 futures 的返回结果正常,最终输出结果的 retrieved background 不为空:

image

image