commit configuration files
This commit is contained in:
parent
1ea399bec7
commit
e50a06fd00
|
|
@ -0,0 +1,43 @@
|
||||||
|
# 服务器基本配置信息
|
||||||
|
# 除 log_verbose/HTTPX_DEFAULT_TIMEOUT 修改后即时生效
|
||||||
|
# 其它配置项修改后都需要重启服务器才能生效,服务运行期间请勿修改
|
||||||
|
|
||||||
|
|
||||||
|
# 生成该配置模板的项目代码版本,如这里的值与程序实际版本不一致,建议重建配置文件模板
|
||||||
|
version: 0.3.1.3
|
||||||
|
|
||||||
|
# 是否开启日志详细信息
|
||||||
|
log_verbose: false
|
||||||
|
|
||||||
|
# httpx 请求默认超时时间(秒)。如果加载模型或对话较慢,出现超时错误,可以适当加大该值。
|
||||||
|
HTTPX_DEFAULT_TIMEOUT: 300.0
|
||||||
|
|
||||||
|
# 知识库默认存储路径
|
||||||
|
KB_ROOT_PATH: /home/bns001/Langchain-Chatchat-latest-dev/chatchat_data/data/knowledge_base
|
||||||
|
|
||||||
|
# 数据库默认存储路径。如果使用sqlite,可以直接修改DB_ROOT_PATH;如果使用其它数据库,请直接修改SQLALCHEMY_DATABASE_URI。
|
||||||
|
DB_ROOT_PATH:
|
||||||
|
/home/bns001/Langchain-Chatchat-latest-dev/chatchat_data/data/knowledge_base/info.db
|
||||||
|
|
||||||
|
# 知识库信息数据库连接URI
|
||||||
|
SQLALCHEMY_DATABASE_URI:
|
||||||
|
sqlite:////home/bns001/Langchain-Chatchat-latest-dev/chatchat_data/data/knowledge_base/info.db
|
||||||
|
|
||||||
|
# API 是否开启跨域
|
||||||
|
OPEN_CROSS_DOMAIN: false
|
||||||
|
|
||||||
|
# 各服务器默认绑定host。如改为"0.0.0.0"需要修改下方所有XX_SERVER的host
|
||||||
|
# Windows 下 WEBUI 自动弹出浏览器时,如果地址为 "0.0.0.0" 是无法访问的,需要手动修改地址栏
|
||||||
|
DEFAULT_BIND_HOST: 0.0.0.0
|
||||||
|
|
||||||
|
# API 服务器地址。其中 public_host 用于生成云服务公网访问链接(如知识库文档链接)
|
||||||
|
API_SERVER:
|
||||||
|
host: 0.0.0.0
|
||||||
|
port: 7861
|
||||||
|
public_host: 127.0.0.1
|
||||||
|
public_port: 7861
|
||||||
|
|
||||||
|
# WEBUI 服务器地址
|
||||||
|
WEBUI_SERVER:
|
||||||
|
host: 0.0.0.0
|
||||||
|
port: 8501
|
||||||
|
|
@ -0,0 +1,114 @@
|
||||||
|
# 知识库相关配置
|
||||||
|
|
||||||
|
|
||||||
|
# 默认使用的知识库
|
||||||
|
DEFAULT_KNOWLEDGE_BASE: samples
|
||||||
|
|
||||||
|
# 默认向量库/全文检索引擎类型
|
||||||
|
# 可选值:['faiss', 'milvus', 'zilliz', 'pg', 'es', 'relyt', 'chromadb']
|
||||||
|
DEFAULT_VS_TYPE: faiss
|
||||||
|
|
||||||
|
# 缓存向量库数量(针对FAISS)
|
||||||
|
CACHED_VS_NUM: 1
|
||||||
|
|
||||||
|
# 缓存临时向量库数量(针对FAISS),用于文件对话
|
||||||
|
CACHED_MEMO_VS_NUM: 10
|
||||||
|
|
||||||
|
# 知识库中单段文本长度(不适用MarkdownHeaderTextSplitter)
|
||||||
|
CHUNK_SIZE: 750
|
||||||
|
|
||||||
|
# 知识库中相邻文本重合长度(不适用MarkdownHeaderTextSplitter)
|
||||||
|
OVERLAP_SIZE: 150
|
||||||
|
|
||||||
|
# 知识库匹配向量数量
|
||||||
|
VECTOR_SEARCH_TOP_K: 3
|
||||||
|
|
||||||
|
# 知识库匹配相关度阈值,取值范围在0-2之间,SCORE越小,相关度越高,取到2相当于不筛选,建议设置在0.5左右
|
||||||
|
SCORE_THRESHOLD: 2.0
|
||||||
|
|
||||||
|
# 默认搜索引擎
|
||||||
|
# 可选值:['bing', 'duckduckgo', 'metaphor', 'searx']
|
||||||
|
DEFAULT_SEARCH_ENGINE: duckduckgo
|
||||||
|
|
||||||
|
# 搜索引擎匹配结题数量
|
||||||
|
SEARCH_ENGINE_TOP_K: 3
|
||||||
|
|
||||||
|
# 是否开启中文标题加强,以及标题增强的相关配置
|
||||||
|
ZH_TITLE_ENHANCE: false
|
||||||
|
|
||||||
|
# PDF OCR 控制:只对宽高超过页面一定比例(图片宽/页面宽,图片高/页面高)的图片进行 OCR。
|
||||||
|
# 这样可以避免 PDF 中一些小图片的干扰,提高非扫描版 PDF 处理速度
|
||||||
|
PDF_OCR_THRESHOLD:
|
||||||
|
- 0.6
|
||||||
|
- 0.6
|
||||||
|
|
||||||
|
# 每个知识库的初始化介绍,用于在初始化知识库时显示和Agent调用,没写则没有介绍,不会被Agent调用。
|
||||||
|
KB_INFO:
|
||||||
|
samples: 关于本项目issue的解答
|
||||||
|
|
||||||
|
# 可选向量库类型及对应配置
|
||||||
|
kbs_config:
|
||||||
|
faiss: {}
|
||||||
|
milvus:
|
||||||
|
host: 127.0.0.1
|
||||||
|
port: '19530'
|
||||||
|
user: ''
|
||||||
|
password: ''
|
||||||
|
secure: false
|
||||||
|
zilliz:
|
||||||
|
host: in01-a7ce524e41e3935.ali-cn-hangzhou.vectordb.zilliz.com.cn
|
||||||
|
port: '19530'
|
||||||
|
user: ''
|
||||||
|
password: ''
|
||||||
|
secure: true
|
||||||
|
pg:
|
||||||
|
connection_uri: postgresql://postgres:postgres@127.0.0.1:5432/langchain_chatchat
|
||||||
|
relyt:
|
||||||
|
connection_uri: postgresql+psycopg2://postgres:postgres@127.0.0.1:7000/langchain_chatchat
|
||||||
|
es:
|
||||||
|
scheme: http
|
||||||
|
host: 127.0.0.1
|
||||||
|
port: '9200'
|
||||||
|
index_name: test_index
|
||||||
|
user: ''
|
||||||
|
password: ''
|
||||||
|
verify_certs: true
|
||||||
|
ca_certs:
|
||||||
|
client_cert:
|
||||||
|
client_key:
|
||||||
|
milvus_kwargs:
|
||||||
|
search_params:
|
||||||
|
metric_type: L2
|
||||||
|
index_params:
|
||||||
|
metric_type: L2
|
||||||
|
index_type: HNSW
|
||||||
|
chromadb: {}
|
||||||
|
|
||||||
|
# TextSplitter配置项,如果你不明白其中的含义,就不要修改。
|
||||||
|
# source 如果选择tiktoken则使用openai的方法 "huggingface"
|
||||||
|
text_splitter_dict:
|
||||||
|
ChineseRecursiveTextSplitter:
|
||||||
|
source: ''
|
||||||
|
tokenizer_name_or_path: ''
|
||||||
|
SpacyTextSplitter:
|
||||||
|
source: huggingface
|
||||||
|
tokenizer_name_or_path: gpt2
|
||||||
|
RecursiveCharacterTextSplitter:
|
||||||
|
source: tiktoken
|
||||||
|
tokenizer_name_or_path: cl100k_base
|
||||||
|
MarkdownHeaderTextSplitter:
|
||||||
|
headers_to_split_on:
|
||||||
|
- - '#'
|
||||||
|
- head1
|
||||||
|
- - '##'
|
||||||
|
- head2
|
||||||
|
- - '###'
|
||||||
|
- head3
|
||||||
|
- - '####'
|
||||||
|
- head4
|
||||||
|
|
||||||
|
# TEXT_SPLITTER 名称
|
||||||
|
TEXT_SPLITTER_NAME: ChineseRecursiveTextSplitter
|
||||||
|
|
||||||
|
# Embedding模型定制词语的词表文件
|
||||||
|
EMBEDDING_KEYWORD_FILE: embedding_keywords.txt
|
||||||
|
|
@ -0,0 +1,189 @@
|
||||||
|
# 模型配置项
|
||||||
|
|
||||||
|
|
||||||
|
# 默认选用的 LLM 名称
|
||||||
|
DEFAULT_LLM_MODEL: qwen2-instruct
|
||||||
|
|
||||||
|
# 默认选用的 Embedding 名称
|
||||||
|
DEFAULT_EMBEDDING_MODEL: bge-large-zh-v1.5
|
||||||
|
|
||||||
|
# AgentLM模型的名称 (可以不指定,指定之后就锁定进入Agent之后的Chain的模型,不指定就是 DEFAULT_LLM_MODEL)
|
||||||
|
Agent_MODEL: ''
|
||||||
|
|
||||||
|
# 默认历史对话轮数
|
||||||
|
HISTORY_LEN: 3
|
||||||
|
|
||||||
|
# 大模型最长支持的长度,如果不填写,则使用模型默认的最大长度,如果填写,则为用户设定的最大长度
|
||||||
|
MAX_TOKENS:
|
||||||
|
|
||||||
|
# LLM通用对话参数
|
||||||
|
TEMPERATURE: 0.7
|
||||||
|
|
||||||
|
# 支持的Agent模型
|
||||||
|
SUPPORT_AGENT_MODELS:
|
||||||
|
- chatglm3-6b
|
||||||
|
- glm-4
|
||||||
|
- openai-api
|
||||||
|
- Qwen-2
|
||||||
|
- qwen2-instruct
|
||||||
|
- gpt-3.5-turbo
|
||||||
|
- gpt-4o
|
||||||
|
|
||||||
|
# LLM模型配置,包括了不同模态初始化参数。
|
||||||
|
# `model` 如果留空则自动使用 DEFAULT_LLM_MODEL
|
||||||
|
LLM_MODEL_CONFIG:
|
||||||
|
preprocess_model:
|
||||||
|
model: ''
|
||||||
|
temperature: 0.05
|
||||||
|
max_tokens: 4096
|
||||||
|
history_len: 10
|
||||||
|
prompt_name: default
|
||||||
|
callbacks: false
|
||||||
|
llm_model:
|
||||||
|
model: ''
|
||||||
|
temperature: 0.9
|
||||||
|
max_tokens: 4096
|
||||||
|
history_len: 10
|
||||||
|
prompt_name: default
|
||||||
|
callbacks: true
|
||||||
|
action_model:
|
||||||
|
model: ''
|
||||||
|
temperature: 0.01
|
||||||
|
max_tokens: 4096
|
||||||
|
history_len: 10
|
||||||
|
prompt_name: ChatGLM3
|
||||||
|
callbacks: true
|
||||||
|
postprocess_model:
|
||||||
|
model: ''
|
||||||
|
temperature: 0.01
|
||||||
|
max_tokens: 4096
|
||||||
|
history_len: 10
|
||||||
|
prompt_name: default
|
||||||
|
callbacks: true
|
||||||
|
image_model:
|
||||||
|
model: sd-turbo
|
||||||
|
size: 256*256
|
||||||
|
|
||||||
|
# # 模型加载平台配置
|
||||||
|
|
||||||
|
|
||||||
|
# # 平台名称
|
||||||
|
# platform_name: xinference
|
||||||
|
|
||||||
|
# # 平台类型
|
||||||
|
# # 可选值:['xinference', 'ollama', 'oneapi', 'fastchat', 'openai', 'custom openai']
|
||||||
|
# platform_type: xinference
|
||||||
|
|
||||||
|
# # openai api url
|
||||||
|
# api_base_url: http://127.0.0.1:9997/v1
|
||||||
|
|
||||||
|
# # api key if available
|
||||||
|
# api_key: EMPTY
|
||||||
|
|
||||||
|
# # API 代理
|
||||||
|
# api_proxy: ''
|
||||||
|
|
||||||
|
# # 该平台单模型最大并发数
|
||||||
|
# api_concurrencies: 5
|
||||||
|
|
||||||
|
# # 是否自动获取平台可用模型列表。设为 True 时下方不同模型类型可自动检测
|
||||||
|
# auto_detect_model: false
|
||||||
|
|
||||||
|
# # 该平台支持的大语言模型列表,auto_detect_model 设为 True 时自动检测
|
||||||
|
# llm_models: []
|
||||||
|
|
||||||
|
# # 该平台支持的嵌入模型列表,auto_detect_model 设为 True 时自动检测
|
||||||
|
# embed_models: []
|
||||||
|
|
||||||
|
# # 该平台支持的图像生成模型列表,auto_detect_model 设为 True 时自动检测
|
||||||
|
# text2image_models: []
|
||||||
|
|
||||||
|
# # 该平台支持的多模态模型列表,auto_detect_model 设为 True 时自动检测
|
||||||
|
# image2text_models: []
|
||||||
|
|
||||||
|
# # 该平台支持的重排模型列表,auto_detect_model 设为 True 时自动检测
|
||||||
|
# rerank_models: []
|
||||||
|
|
||||||
|
# # 该平台支持的 STT 模型列表,auto_detect_model 设为 True 时自动检测
|
||||||
|
# speech2text_models: []
|
||||||
|
|
||||||
|
# # 该平台支持的 TTS 模型列表,auto_detect_model 设为 True 时自动检测
|
||||||
|
# text2speech_models: []
|
||||||
|
MODEL_PLATFORMS:
|
||||||
|
- platform_name: xinference
|
||||||
|
platform_type: xinference
|
||||||
|
api_base_url: http://127.0.0.1:9997/v1
|
||||||
|
api_key: EMPTY
|
||||||
|
api_proxy: ''
|
||||||
|
api_concurrencies: 5
|
||||||
|
auto_detect_model: true
|
||||||
|
llm_models: []
|
||||||
|
embed_models: []
|
||||||
|
text2image_models: []
|
||||||
|
image2text_models: []
|
||||||
|
rerank_models: []
|
||||||
|
speech2text_models: []
|
||||||
|
text2speech_models: []
|
||||||
|
- platform_name: ollama
|
||||||
|
platform_type: ollama
|
||||||
|
api_base_url: http://127.0.0.1:11434/v1
|
||||||
|
api_key: EMPTY
|
||||||
|
api_proxy: ''
|
||||||
|
api_concurrencies: 5
|
||||||
|
auto_detect_model: false
|
||||||
|
llm_models:
|
||||||
|
- qwen:7b
|
||||||
|
- qwen2:7b
|
||||||
|
embed_models:
|
||||||
|
- quentinz/bge-large-zh-v1.5
|
||||||
|
text2image_models: []
|
||||||
|
image2text_models: []
|
||||||
|
rerank_models: []
|
||||||
|
speech2text_models: []
|
||||||
|
text2speech_models: []
|
||||||
|
- platform_name: oneapi
|
||||||
|
platform_type: oneapi
|
||||||
|
api_base_url: http://127.0.0.1:3000/v1
|
||||||
|
api_key: sk-
|
||||||
|
api_proxy: ''
|
||||||
|
api_concurrencies: 5
|
||||||
|
auto_detect_model: false
|
||||||
|
llm_models:
|
||||||
|
- chatglm_pro
|
||||||
|
- chatglm_turbo
|
||||||
|
- chatglm_std
|
||||||
|
- chatglm_lite
|
||||||
|
- qwen-turbo
|
||||||
|
- qwen-plus
|
||||||
|
- qwen-max
|
||||||
|
- qwen-max-longcontext
|
||||||
|
- ERNIE-Bot
|
||||||
|
- ERNIE-Bot-turbo
|
||||||
|
- ERNIE-Bot-4
|
||||||
|
- SparkDesk
|
||||||
|
embed_models:
|
||||||
|
- text-embedding-v1
|
||||||
|
- Embedding-V1
|
||||||
|
text2image_models: []
|
||||||
|
image2text_models: []
|
||||||
|
rerank_models: []
|
||||||
|
speech2text_models: []
|
||||||
|
text2speech_models: []
|
||||||
|
- platform_name: openai
|
||||||
|
platform_type: openai
|
||||||
|
api_base_url: https://api.openai.com/v1
|
||||||
|
api_key: sk-proj-
|
||||||
|
api_proxy: ''
|
||||||
|
api_concurrencies: 5
|
||||||
|
auto_detect_model: false
|
||||||
|
llm_models:
|
||||||
|
- gpt-4o
|
||||||
|
- gpt-3.5-turbo
|
||||||
|
embed_models:
|
||||||
|
- text-embedding-3-small
|
||||||
|
- text-embedding-3-large
|
||||||
|
text2image_models: []
|
||||||
|
image2text_models: []
|
||||||
|
rerank_models: []
|
||||||
|
speech2text_models: []
|
||||||
|
text2speech_models: []
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
# Prompt 模板.除 Agent 模板使用 f-string 外,其它均使用 jinja2 格式
|
||||||
|
|
||||||
|
|
||||||
|
# 意图识别用模板
|
||||||
|
preprocess_model:
|
||||||
|
default: "你只要回复0 和 1 ,代表不需要使用工具。以下几种问题不需要使用工具:\n1. 需要联网查询的内容\n2. 需要计算的内容\n3. 需要查询实时性的内容\n\
|
||||||
|
如果我的输入满足这几种情况,返回1。其他输入,请你回复0,你只要返回一个数字\n这是我的问题:"
|
||||||
|
|
||||||
|
# 普通 LLM 用模板
|
||||||
|
llm_model:
|
||||||
|
default: '{{input}}'
|
||||||
|
with_history: "The following is a friendly conversation between a human and an AI.\n
|
||||||
|
The AI is talkative and provides lots of specific details from its context.\n
|
||||||
|
If the AI does not know the answer to a question, it truthfully says it does not
|
||||||
|
know.\n\nCurrent conversation:\n{{history}}\nHuman: {{input}}\nAI:"
|
||||||
|
|
||||||
|
# RAG 用模板,可用于知识库问答、文件对话、搜索引擎对话
|
||||||
|
rag:
|
||||||
|
default: "【指令】根据已知信息,简洁和专业的来回答问题。如果无法从中得到答案,请说 “根据已知信息无法回答该问题”,不允许在答案中添加编造成分,答案请使用中文。\n\
|
||||||
|
\n【已知信息】{{context}}\n\n【问题】{{question}}\n"
|
||||||
|
empty: "请你回答我的问题:\n{{question}}"
|
||||||
|
|
||||||
|
# Agent 模板
|
||||||
|
action_model:
|
||||||
|
GPT-4: "Answer the following questions as best you can. You have access to the following
|
||||||
|
tools:\nThe way you use the tools is by specifying a json blob.\nSpecifically,
|
||||||
|
this json should have a `action` key (with the name of the tool to use) and a
|
||||||
|
`action_input` key (with the input to the tool going here).\nThe only values that
|
||||||
|
should be in the \"action\" field are: {tool_names}\nThe $JSON_BLOB should only
|
||||||
|
contain a SINGLE action, do NOT return a list of multiple actions. Here is an
|
||||||
|
example of a valid $JSON_BLOB:\n```\n\n{{{{\n \"action\": $TOOL_NAME,\n \"action_input\"\
|
||||||
|
: $INPUT\n}}}}\n```\n\nALWAYS use the following format:\nQuestion: the input question
|
||||||
|
you must answer\nThought: you should always think about what to do\nAction:\n
|
||||||
|
```\n\n$JSON_BLOB```\n\nObservation: the result of the action\n... (this Thought/Action/Observation
|
||||||
|
can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final
|
||||||
|
answer to the original input question\nBegin! Reminder to always use the exact
|
||||||
|
characters `Final Answer` when responding.\nQuestion:{input}\nThought:{agent_scratchpad}\n"
|
||||||
|
ChatGLM3: "You can answer using the tools.Respond to the human as helpfully and
|
||||||
|
accurately as possible.\nYou have access to the following tools:\n{tools}\nUse
|
||||||
|
a json blob to specify a tool by providing an action key (tool name)\nand an action_input
|
||||||
|
key (tool input).\nValid \"action\" values: \"Final Answer\" or [{tool_names}]\n
|
||||||
|
Provide only ONE action per $JSON_BLOB, as shown:\n\n```\n{{{{\n \"action\":
|
||||||
|
$TOOL_NAME,\n \"action_input\": $INPUT\n}}}}\n```\n\nFollow this format:\n\n
|
||||||
|
Question: input question to answer\nThought: consider previous and subsequent
|
||||||
|
steps\nAction:\n```\n$JSON_BLOB\n```\nObservation: action result\n... (repeat
|
||||||
|
Thought/Action/Observation N times)\nThought: I know what to respond\nAction:\n\
|
||||||
|
```\n{{{{\n \"action\": \"Final Answer\",\n \"action_input\": \"Final response
|
||||||
|
to human\"\n}}}}\nBegin! Reminder to ALWAYS respond with a valid json blob of
|
||||||
|
a single action. Use tools if necessary.\nRespond directly if appropriate. Format
|
||||||
|
is Action:```$JSON_BLOB```then Observation:.\nQuestion: {input}\n\n{agent_scratchpad}\n"
|
||||||
|
qwen: "Answer the following questions as best you can. You have access to the following
|
||||||
|
APIs:\n\n{tools}\n\nUse the following format:\n\nQuestion: the input question
|
||||||
|
you must answer\nThought: you should always think about what to do\nAction: the
|
||||||
|
action to take, should be one of [{tool_names}]\nAction Input: the input to the
|
||||||
|
action\nObservation: the result of the action\n... (this Thought/Action/Action
|
||||||
|
Input/Observation can be repeated zero or more times)\nThought: I now know the
|
||||||
|
final answer\nFinal Answer: the final answer to the original input question\n\n
|
||||||
|
Format the Action Input as a JSON object.\n\nBegin!\n\nQuestion: {input}\n\n{agent_scratchpad}\n\
|
||||||
|
\n"
|
||||||
|
structured-chat-agent: "Respond to the human as helpfully and accurately as possible.
|
||||||
|
You have access to the following tools:\n\n{tools}\n\nUse a json blob to specify
|
||||||
|
a tool by providing an action key (tool name) and an action_input key (tool input).\n
|
||||||
|
\nValid \"action\" values: \"Final Answer\" or {tool_names}\n\nProvide only ONE
|
||||||
|
action per $JSON_BLOB, as shown:\n\n```\n{{\n \"action\": $TOOL_NAME,\n \"action_input\"\
|
||||||
|
: $INPUT\n}}\n```\n\nFollow this format:\n\nQuestion: input question to answer\n
|
||||||
|
Thought: consider previous and subsequent steps\nAction:\n```\n$JSON_BLOB\n```\n
|
||||||
|
Observation: action result\n... (repeat Thought/Action/Observation N times)\n
|
||||||
|
Thought: I know what to respond\nAction:\n```\n{{\n \"action\": \"Final Answer\"\
|
||||||
|
,\n \"action_input\": \"Final response to human\"\n}}\n\nBegin! Reminder to ALWAYS
|
||||||
|
respond with a valid json blob of a single action. Use tools if necessary. Respond
|
||||||
|
directly if appropriate. Format is Action:```$JSON_BLOB```then Observation\n{input}\n\
|
||||||
|
\n{agent_scratchpad}\n\n"
|
||||||
|
|
||||||
|
# 后处理模板
|
||||||
|
postprocess_model:
|
||||||
|
default: '{{input}}'
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
# Agent 工具配置项
|
||||||
|
|
||||||
|
|
||||||
|
# 本地知识库工具配置项
|
||||||
|
search_local_knowledgebase:
|
||||||
|
use: false
|
||||||
|
top_k: 3
|
||||||
|
score_threshold: 2.0
|
||||||
|
conclude_prompt:
|
||||||
|
with_result: "<指令>根据已知信息,简洁和专业的来回答问题。如果无法从中得到答案,请说 \"根据已知信息无法回答该问题\",不允许在答案中添加编造成分,答案请使用中文。
|
||||||
|
</指令>\n<已知信息>{{ context }}</已知信息>\n<问题>{{ question }}</问题>\n"
|
||||||
|
without_result: "请你根据我的提问回答我的问题:\n{{ question }}\n请注意,你必须在回答结束后强调,你的回答是根据你的经验回答而不是参考资料回答的。\n"
|
||||||
|
|
||||||
|
# 搜索引擎工具配置项。推荐自己部署 searx 搜索引擎,国内使用最方便。
|
||||||
|
search_internet:
|
||||||
|
use: false
|
||||||
|
search_engine_name: duckduckgo
|
||||||
|
search_engine_config:
|
||||||
|
bing:
|
||||||
|
bing_search_url: https://api.bing.microsoft.com/v7.0/search
|
||||||
|
bing_key: ''
|
||||||
|
metaphor:
|
||||||
|
metaphor_api_key: ''
|
||||||
|
split_result: false
|
||||||
|
chunk_size: 500
|
||||||
|
chunk_overlap: 0
|
||||||
|
duckduckgo: {}
|
||||||
|
searx:
|
||||||
|
host: https://metasearx.com
|
||||||
|
engines: []
|
||||||
|
categories: []
|
||||||
|
language: zh-CN
|
||||||
|
top_k: 5
|
||||||
|
verbose: Origin
|
||||||
|
conclude_prompt: "<指令>这是搜索到的互联网信息,请你根据这些信息进行提取并有调理,简洁的回答问题。如果无法从中得到答案,请说 “无法搜索到能回答问题的内容”。
|
||||||
|
</指令>\n<已知信息>{{ context }}</已知信息>\n<问题>\n{{ question }}\n</问题>\n"
|
||||||
|
arxiv:
|
||||||
|
use: false
|
||||||
|
|
||||||
|
# 心知天气(https://www.seniverse.com/)工具配置项
|
||||||
|
weather_check:
|
||||||
|
use: true
|
||||||
|
api_key: 'SwOnf9XkLSik-uUBt'
|
||||||
|
search_youtube:
|
||||||
|
use: false
|
||||||
|
wolfram:
|
||||||
|
use: false
|
||||||
|
appid: ''
|
||||||
|
|
||||||
|
# numexpr 数学计算工具配置项
|
||||||
|
calculate:
|
||||||
|
use: false
|
||||||
|
|
||||||
|
# 图片生成工具配置项。model 必须是在 model_settings.yaml/MODEL_PLATFORMS 中配置过的。
|
||||||
|
text2images:
|
||||||
|
use: false
|
||||||
|
model: sd-turbo
|
||||||
|
size: 256*256
|
||||||
|
|
||||||
|
# text2sql使用建议
|
||||||
|
# 1、因大模型生成的sql可能与预期有偏差,请务必在测试环境中进行充分测试、评估;
|
||||||
|
# 2、生产环境中,对于查询操作,由于不确定查询效率,推荐数据库采用主从数据库架构,让text2sql连接从数据库,防止可能的慢查询影响主业务;
|
||||||
|
# 3、对于写操作应保持谨慎,如不需要写操作,设置read_only为True,最好再从数据库层面收回数据库用户的写权限,防止用户通过自然语言对数据库进行修改操作;
|
||||||
|
# 4、text2sql与大模型在意图理解、sql转换等方面的能力有关,可切换不同大模型进行测试;
|
||||||
|
# 5、数据库表名、字段名应与其实际作用保持一致、容易理解,且应对数据库表名、字段进行详细的备注说明,帮助大模型更好理解数据库结构;
|
||||||
|
# 6、若现有数据库表名难于让大模型理解,可配置下面table_comments字段,补充说明某些表的作用。
|
||||||
|
text2sql:
|
||||||
|
model_name: qwen-plus
|
||||||
|
use: false
|
||||||
|
sqlalchemy_connect_str: mysql+pymysql://用户名:密码@主机地址/数据库名称
|
||||||
|
read_only: false
|
||||||
|
top_k: 50
|
||||||
|
return_intermediate_steps: true
|
||||||
|
table_names: []
|
||||||
|
table_comments: {}
|
||||||
|
|
||||||
|
# 高德地图、天气相关工具配置项。
|
||||||
|
amap:
|
||||||
|
use: false
|
||||||
|
api_key: 高德地图 API KEY
|
||||||
|
|
||||||
|
# text2promql 使用建议
|
||||||
|
# 1、因大模型生成的 promql 可能与预期有偏差, 请务必在测试环境中进行充分测试、评估;
|
||||||
|
# 2、text2promql 与大模型在意图理解、metric 选择、promql 转换等方面的能力有关, 可切换不同大模型进行测试;
|
||||||
|
# 3、当前仅支持 单prometheus 查询, 后续考虑支持 多prometheus 查询.
|
||||||
|
text2promql:
|
||||||
|
use: false
|
||||||
|
prometheus_endpoint: http://127.0.0.1:9090
|
||||||
|
username: ''
|
||||||
|
password: ''
|
||||||
|
|
||||||
|
# URL内容阅读(https://r.jina.ai/)工具配置项
|
||||||
|
# 请确保部署的网络环境良好,以免造成超时等问题
|
||||||
|
url_reader:
|
||||||
|
use: false
|
||||||
|
timeout: '10000'
|
||||||
|
|
@ -85,6 +85,7 @@ def regist_tool(
|
||||||
def _parse_tool(t: BaseTool):
|
def _parse_tool(t: BaseTool):
|
||||||
nonlocal description, title
|
nonlocal description, title
|
||||||
|
|
||||||
|
print(f"_parse_too:t.name : {t.name}")
|
||||||
_TOOLS_REGISTRY[t.name] = t
|
_TOOLS_REGISTRY[t.name] = t
|
||||||
|
|
||||||
# change default description
|
# change default description
|
||||||
|
|
@ -165,6 +166,7 @@ def format_context(self: BaseToolOutput) -> str:
|
||||||
doc = DocumentWithVSId.parse_obj(doc)
|
doc = DocumentWithVSId.parse_obj(doc)
|
||||||
source_documents.append(doc.page_content)
|
source_documents.append(doc.page_content)
|
||||||
|
|
||||||
|
print(f"format_context: doc.page_content: {doc.page_content}")
|
||||||
if len(source_documents) == 0:
|
if len(source_documents) == 0:
|
||||||
context = "没有找到相关文档,请更换关键词重试"
|
context = "没有找到相关文档,请更换关键词重试"
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ def weather_check(
|
||||||
):
|
):
|
||||||
"""Use this tool to check the weather at a specific city"""
|
"""Use this tool to check the weather at a specific city"""
|
||||||
|
|
||||||
|
print(f"weather_check,city{city}")
|
||||||
tool_config = get_tool_config("weather_check")
|
tool_config = get_tool_config("weather_check")
|
||||||
api_key = tool_config.get("api_key")
|
api_key = tool_config.get("api_key")
|
||||||
url = f"https://api.seniverse.com/v3/weather/now.json?key={api_key}&location={city}&language=zh-Hans&unit=c"
|
url = f"https://api.seniverse.com/v3/weather/now.json?key={api_key}&location={city}&language=zh-Hans&unit=c"
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ from chatchat.settings import Settings
|
||||||
from chatchat.utils import build_logger
|
from chatchat.utils import build_logger
|
||||||
from .openai_routes import openai_request, OpenAIChatOutput
|
from .openai_routes import openai_request, OpenAIChatOutput
|
||||||
|
|
||||||
|
# FastAPI 路由处理器,处理与对话相关的请求
|
||||||
|
|
||||||
logger = build_logger()
|
logger = build_logger()
|
||||||
|
|
||||||
|
|
@ -73,12 +74,16 @@ async def chat_completions(
|
||||||
|
|
||||||
# check tools & tool_choice in request body
|
# check tools & tool_choice in request body
|
||||||
if isinstance(body.tool_choice, str):
|
if isinstance(body.tool_choice, str):
|
||||||
|
logger.info(f"tool_choice")
|
||||||
if t := get_tool(body.tool_choice):
|
if t := get_tool(body.tool_choice):
|
||||||
|
logger.info(f"function name: {t.name}")
|
||||||
body.tool_choice = {"function": {"name": t.name}, "type": "function"}
|
body.tool_choice = {"function": {"name": t.name}, "type": "function"}
|
||||||
if isinstance(body.tools, list):
|
if isinstance(body.tools, list):
|
||||||
|
logger.info(f"tools")
|
||||||
for i in range(len(body.tools)):
|
for i in range(len(body.tools)):
|
||||||
if isinstance(body.tools[i], str):
|
if isinstance(body.tools[i], str):
|
||||||
if t := get_tool(body.tools[i]):
|
if t := get_tool(body.tools[i]):
|
||||||
|
logger.info(f"function name: {t.name}")
|
||||||
body.tools[i] = {
|
body.tools[i] = {
|
||||||
"type": "function",
|
"type": "function",
|
||||||
"function": {
|
"function": {
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
with st.sidebar:
|
with st.sidebar:
|
||||||
st.image(
|
st.image(
|
||||||
get_img_base64("logo-long-chatchat-trans-v2.png"), use_column_width=True
|
get_img_base64("logo-long-chatchat-trans-v2.png"), use_container_width=True
|
||||||
)
|
)
|
||||||
st.caption(
|
st.caption(
|
||||||
f"""<p align="right">当前版本:{__version__}</p>""",
|
f"""<p align="right">当前版本:{__version__}</p>""",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue