目标
提前设置有关新上市 公司招股书需要分析的问题列表,上传招股书后,系统自动对预置的问题逐个执行问答,最终生成招股书分析报告。
我们选取三个具有代表性的问题:
- 该公司的审计机构是哪家公司?该审计机构去年的上市项目数量与排名分别是多少?
需要从招股书中查询信息并进一步结合外部信息(审计机构行业排名情况)进行回答
- 该公司处在哪个行业?搜索该行业最近几年中国的市场规模是多少?
需要从招股书中查询信息并进一步结合外部信息(市场规模)进行回答
- 该公司流动比率有何变化?
数值信息计算
除了以上三个问题,专业人员一般会从商业模式画布中的八个分析维度以及一些重要财务指标的分析来完成对一家新上市公司总体情况的了解,我们在毕昇演示环境(dataelem.com/bisheng)中提供了总计42个问题的全量招股书分析技能,欢迎试用。
效果示例
构建思路
针对这三个问题分析技能所需的组件:
- 需要根据文本内容进行问答,因此选择语言模型ChatOpenAI组件(或其他语言模型组件)、RetrievalQA组件、CombineDocsChain组件、Milvus组件、OpenAIEmbeddings组件,组成对文本进行问答的链;
- 除了根据招股书之外,还要根据包含审计机构项目数量和排名的文本内容回答,所以我们需要构建两条对文本进行问答的链,其中一条链需要让用户上传招股书报告,因此选择PyPDFLoader组件和InputFileNode组件;另一条链我们提前把包含审计机构项目数量和排名的文本导入知识库,在Milvus组件的collection name参数中填写对应知识库的信息;
- 回答第二个问题需要联网进行搜索,选择BingSearchRun 🚧组件、BingSearchAPIWrapper组件;
- 回答第三个问题涉及到对比计算,选择Calculator 🚧组件提供计算能力(大语言模型具备一定的计算能力,也可以选择不添加Calculator组件);
- 选择ZeroShotAgent组件把所有部分连接起来,BingSearchRun组件和Calculator组件是[工具/Tools]类型下的组件,因此可以直接和[代理/Agents]连接,对文本进行问答的链想要与[代理/Agents]连接,需要引入Tool组件,把整个对文本进行问答的链作为工具与[代理/Agents]连接;
- 需要预置问题,因此选择Input Node组件。
- 连接示例如图:
- 工作原理
用户上传文档并解析完成后,ZeroShotAgent组件会自动逐个运行预置的问题,并且每个问题自行选择调用哪个工具(一个或多个)来回答,逐个问题得到答案后最终将所有问题的答案拼接在一起生成分析报告。
- 组件参数设置
- ChatOpenAI
- Model Name:推荐选择gpt-3.5-turbo-16k-0613
- OpenAI API Key:API接口密钥
- OpenAI API Base/OpenAI Proxy:服务的地址,填写其中之一即可(如果是自己代理的国内的地址则填写OpenAI Proxy参数)
- Milvus
- Collection Name
- 只能有一个Milvus组件连接[装载器/Loaders]中的组件,供用户上传招股书报告,此时用户上传报告后会自动创建一个库,无需填写;
- 其他Milvus组件需填写对应毕昇平台[知识]功能模块中创建知识库的Collection Name;
- OpenAIEmbeddings
- Tiktoken Model Name:模型名称,推荐使用text-embedding-ada-002
- OpenAI API Key:API接口密钥
- OpenAI API Base/OpenAI Proxy:服务的地址,填写其中之一即可(如果是自己代理的国内的地址则填写OpenAI Proxy参数)
- CombineDocsChain
- Chain Type:选择“stuff”,原因详见CombineDocsChain
- token_max:“-1”,即对传给大模型的文本长度不做限制,详见CombineDocsChain
- BingSearchAPIWrapper
- Bing Search Url
- Bing Subscription Key
- Tool
- Description:对工具的描述,ZeroShotAgent组件根据描述判断是否调用这个工具。连接导入招股书文档的Tool组件可以填写“如果用户需要知道关于这家公司的各方面信息,可以使用该工具。”,连接审计机构信息文档的Tool组件可以填写“若用户想要查询审计机构(即会计师事务所)的背景信息,可以使用该工具。”
- Name:工具的名称,连接导入招股书文档的Tool组件可以设置为“Basic_information”,连接审计机构信息文档的Tool组件可以设置为“Auditors_info”
- InputNode:预置的问题,这里填入开头列出的三个问题
- ZeroShotAgent
- Format Instructions:指导Agent运行的方式
- input_variables:最终的提示词所需要的输入变量列表,对应Suffix中的变量,即{query}和{agent_scratchpad}
- prefix:放在工具列表之前的字符串,作为提示词模板的开头
- suffix:放在工具列表后面的字符串,作为提示词模板的结尾
- ChatOpenAI
优化
如果问题的答案不完全正确,或无法给出答案,除合同审核 中提到的问题优化、ZeroShotAgent组件参数优化外,我们还可以对其他组件的参数进行优化。
- Tool组件参数优化
Tool组件的参数是作为提示词的一部分传递给大语言模型的,详见ZeroShotAgent,所以,当我们有多条文本问答的链的时候,可以在Tool组件的“Description”参数中,更详细地描述这个Tool组件连接的知识库所包含的文本信息、能回答的问题种类等。
如可以在连接招股书文档的Tool组件的“Description”参数中添加如下问题,让语言模型学习到如果需要回答这类问题,可以使用这个工具:
如果用户需要知道关于这家公司的各方面信息,可以使用该工具。如:
- 某公司的盈利模式是什么
- 某公司的保荐机构是哪家公司?
- 某公司的审计机构是哪家公司?
- 某公司的主要产品是什么?
可以在连接审计机构信息文档的Tool组件的“Description”参数中添加“如在去年一年中审计项目的项目量和排名”,更加明确这个工具的知识库所能提供的信息:
若用户想要查询审计机构(即会计师事务所)的背景信息,如在去年一年中审计项目的项目量和排名,可以使用该工具。
- CombineDocsChain参数优化
如果语言模型总是因为超token数无法输出答案,可以通过“token_max”参数设置进行优化。原理详见CombineDocsChain