Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

消息中工具、agent和用户输入的组装方式 #13

Closed
crazygo opened this issue Jan 31, 2024 · 0 comments
Closed

消息中工具、agent和用户输入的组装方式 #13

crazygo opened this issue Jan 31, 2024 · 0 comments

Comments

@crazygo
Copy link
Contributor

crazygo commented Jan 31, 2024

用户发出或收到的消息,会携带网页文本、网页标题等信息,这些信息最终会被渲染或传给模型。
为了方便优化 prompt,需要保留最原始的信息,因此需要定义不同类型内容的渲染方式、存储方式、转义为 Prompt 的方式。

基本原则

  1. 客户端发送的消息结构应该满足 openai或者zhipuai v4的要求,以方便用户使用自己的 API KEY。

初始化消息 (02.27 更新)

对话的开始,是自动设置的机器人角色,使用以下 prompt 要求机器人按照一定的格式理解用户输入:

你是 问那个人,你需要帮助用户解决问题.你需要遵循以下指导:
        1. 使用中文回答
        2. 用户的 Quote 需要你关注,但并不要求一定用到
        3. 用户的问题回跟在 UserPrompt 后面

初步设想这个初始消息可以使用 模版语言 描述,允许用户自己定义、插入变量、或者使用条件-循环等语法。

用户消息(03.17 更新)

用户发出的信息放在 {"role": "user", "content": "你好"}中。
其中,content的内容,分为 工具 + Agent + User Input 三个部分。

  • 工具: 例如 解释 工具的 Prompt 是 请用 ${DISPLAY_LANG} 解释: ${INPUT} 。其中 DISPLAY_LANG 可以是中文、英文,从用户设置中获取。INPUT 是用户主动输入的文字,例如 Hello World
  • Agent:现在只有一个 Agent,就是“引用”。当用户从页面的代码块、或者选择文字后使用右键菜单唤起弹窗,“引用 Agent”会提取代码块信息或选择的文字信息,提取后的结果是
    // 待定
    {
      "agentId":"quote",
      "title":"import * as vscode from 'vscode';",
      "pageUrl":"import * as vscode from 'vscode';\nimport * as path from 'path';\nexport let doc: vscode.TextDocument;",
      "pageTitle": "",
      "linkText": "",
      "linkUrl": ""
    }
  • User Input : 用户在弹窗输入框中填写的文字,例如“用幼儿园的知识”

这三个部分会被拼接到实际发给模型的 prompt 中。最终发出去的消息格式,由“工具”控制,不同的工具,最终组装完成的消息是不一样的。

例子: https://github.com/askman-dev/askman-chrome-extension/raw/dev/src/assets/conf/default-tools.toml

[explain]
name = "解释"
hbs = """
{{#if page.selection}}
请用 ${chat.language} 解释: ${page.selection}
${chat.input}
{{^}}
请用 ${chat.language} 解释: ${chat.input}
{{/if}}
"""

V2

怎么解决页面的 agent 和 工具的关系呢?

以下为草稿 #### 在 Stack Overflow 提问的流程 1. 使用快捷键唤起对话窗口 4. 窗口内自动填充信息 - 自动引用标题`title`、问题`question` - 例如 https://stackoverflow.com/questions/40471/what-are-the-differences-between-a-hashmap-and-a-hashtable-in-java 5. 用户输入问题 `{userInput}` - 例如 `给我两个例子` 6. 扩展需要组合出发送给接口的信息 ```json { "context": [ { "id":"stackoverflow", "title":"What are the differences between a HashMap and a Hashtable in Java?", "url":"https://stackoverflow.com/questions/40471/what-are-the-differences-between-a-hashmap-and-a-hashtable-in-java", "question":"What are the differences between...", "answers":[] }], "messages": [] } ``` 其中,`messages` 是 `{role: user|assistant, content:string}` 的结构 content 内容为 context 和 用户输入的组合。 ```md 我正在浏览StackOverflow: {title}。 {userInput} ```

在 GitHub Pages 提问的流程

在 GitHub Pages 使用 AI 查找的流程

{
  "context": [
    {
      "id":"page",
      "title":"",
      "url":"",
      "digest":"",
      "quote":"",
      "content":"",
    },
    {
      "id":"pageSearch",
      "list":[{
          "xpath": "HTML>body>div[id=nk]",
          "digest":""
        }]
    }
  ],
  "meta":{
      
   },
  "messages":[ {
           "role": "user",
           "content": "find anything about sql"
        }  ],
   "delta": {}
}

.delta 在接收返回时使用,结构和 openai 的api 一致 ,例如

{"content":"","role":null}
@crazygo crazygo changed the title 消息格式定义 对话消息的结构定义 Feb 1, 2024
@crazygo crazygo added this to the Backlog milestone Feb 4, 2024
@crazygo crazygo mentioned this issue Feb 7, 2024
13 tasks
@crazygo crazygo modified the milestones: Backlog, V0.1.0 Feb 7, 2024
@crazygo crazygo changed the title 对话消息的结构定义 对话消息的结构定义 V1 Feb 7, 2024
@crazygo crazygo changed the title 对话消息的结构定义 V1 消息中工具、应用和用户输入的组装方式 Mar 16, 2024
@crazygo crazygo changed the title 消息中工具、应用和用户输入的组装方式 消息中工具、agent和用户输入的组装方式 Mar 16, 2024
@crazygo crazygo modified the milestones: V0.1.0, Document & Designs Mar 16, 2024
@crazygo crazygo added the agent label Aug 19, 2024 — with Linear
@crazygo crazygo removed the agent label Oct 27, 2024
@askman-dev askman-dev locked and limited conversation to collaborators Nov 3, 2024
@crazygo crazygo converted this issue into discussion #99 Nov 3, 2024

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Projects
None yet
Development

No branches or pull requests

1 participant